#include "Date.h"
#include <ctime>

    /**********************************************************************
        Classe: Date
        Funcionalidade: Guarda uma data, e tem funções para a sua manipulação
    ***********************************************************************/

Date::Date(int di, int m, int a, int h, int mi) {
	time_t rawtime;

	//Ele pega a hora atual pra preencher o que nao vai ser preenchido
	time(&rawtime);
	data = localtime(&rawtime);
	setDia(di);
	setMes(m);
	setAno(a);
	setHora(h);
	setMinuto(m);
}

int Date::getDia() {
	return data->tm_mday;
}

void Date::setDia(int d) {
	if (d == -1) {
		time_t rawtime;
		tm * temp;
		time(&rawtime);
		temp = localtime(&rawtime);
		data->tm_mday = temp->tm_mday;
	}
	data->tm_mday = d;
	mktime(data); //Atualiza coisas como dia da semana, que provavelmente não usaremos, mas...
}

int Date::getMes() {
	return data->tm_mon + 1;
}

void Date::setMes(int m) {
	if (m == -1) {
		time_t rawtime;
		tm * temp;
		time(&rawtime);
		temp = localtime(&rawtime);
		data->tm_mon = temp->tm_mon;
	}
	data->tm_mon = m - 1;
	mktime(data);
}

int Date::getAno() {
	return data->tm_year + 1900;
}

void Date::setAno(int a) {
	if (a == -1) {
		time_t rawtime;
		tm * temp;
		time(&rawtime);
		temp = localtime(&rawtime);
		data->tm_year = temp->tm_year;
	}
	data->tm_year = a - 1900;
	mktime(data);
}

int Date::getHora() {
	return data->tm_hour;
}

void Date::setHora(int h) {
	if (h == -1) {
		time_t rawtime;
		tm * temp;
		time(&rawtime);
		temp = localtime(&rawtime);
		data->tm_hour = temp->tm_hour;
	}
	data->tm_hour = h;
	mktime(data);
}

int Date::getMinuto() {
	return data->tm_min;
}

void Date::setMinuto(int m) {
	if (m == -1) {
		time_t rawtime;
		tm * temp;
		time(&rawtime);
		temp = localtime(&rawtime);
		data->tm_min = temp->tm_min;
	}
	data->tm_min = m;
	mktime(data);
}

int Date::diffAno() {
	time_t now = time(NULL);
	time_t timeData = mktime(data);
	//Numero de segundos em um ano abaixo
	return (int) difftime(now, timeData) / 31556926;
}


